const fs = require('fs')
const path = require('path')

/* 普通方式读取文件
    fs.readFile(path.join(__dirname,'files/file1.txt'), 'utf-8', (err,data)=>{
        if(err) throw err
        console.log(data)
    })
*/
// 封装成一个方法
/*  function getFileByPath(fpath){
        fs.readFile(fpath, 'utf-8', (err,data)=>{
            if(err) throw err
            return data
        })
    }
    var result = getFileByPath(path.join(__dirname, 'files/file1.txt'))
    console.log(result) 
    // 因为 redFile是异步方法，所以输出undefined
*/
// 添加回调函数
/*    function getFileByPath(fpath,callback){
        fs.readFile(fpath, 'utf-8', (err,data)=>{
            // 如果报错，进入 if分支后，if后的代码就没必要执行
            if(err) return callback(err)
            callback(null,data)
            // 成功后，数据位于 callback参数的第二个位置，第一个为 null；失败后，第一个参数为 error对象，第二个参数为 undefined

        })
    }
    getFileByPath(path.join(__dirname,'files/file11.txt'),(err,data)=>{
        if(err){
            return console.log(err.message)
        } else{
            console.log(data)
        }
    })
*/
// 将 callback拆分为二
function getFileByPath(fpath,sucescall,errorcall){
    fs.readFile(fpath, 'utf-8', (err,data)=>{
        // 如果报错，进入 if分支后，if后的代码就没必要执行
        if(err) return errorcall(err)
        sucescall(data)
    })
}
/*    getFileByPath(path.join(__dirname,'files/file1.txt'),function(data){
        console.log("success: "+data)
    },function(err){
        console.log("error: "+err.message)
    })
*/
// 按顺序读取 file1 -> file2 -> file3 "回调地狱"
getFileByPath(path.join(__dirname, 'files/file1.txt'), function(data){
    console.log(data)
    getFileByPath(path.join(__dirname, 'files/file2.txt'), function(data){
        console.log(data)
        getFileByPath(path.join(__dirname, 'files/file3.txt'), function(data){
            console.log(data)
            
        })
    })
})